import { dictionary } from './dictionary';
import moment from 'moment';

export const help = {
    getDictionayText: (type, value) => {
        if (value) {
            if (dictionary[type]) {
                const arr = value.toString().split(',');
                const f = dictionary[type].filter(i => arr.find(j => j == i.value));
                if (f) {
                    const m = f.map(m => m.text);
                    return m.join(',');
                }
            }
        }
        return '';
    },
    transDateTime: (val, fmt) => {
        if (val && !Array.isArray(val)) {
            if (val === '0001-01-01 00:00:00~0001-01-01 00:00:00') return null;
            const dt = val.split('~');
            if (dt && dt.length === 2) {
                return [moment(dt[0], fmt), moment(dt[1], fmt)];
            }
            else if (dt && dt.length === 1) {
                return moment(dt[0], fmt);
            }
            return null;
        }
        return null;
    },

    /**
     * 将数据转换为标准的[{ value: '1', text: 'Demo' }]格式
     * @param data 需要转换的数据
     * @param valueField 值字段
     * @param displayField 名称字段
     *  */
    transToStandardData: (data, valueField, displayField) => {
        if (data && data.initialData === true) {
            return [];
        } else {
            if (data && Array.isArray(data)) {
                data.forEach(i => {
                    i.value = i[`${valueField}`];
                    i.text = i[`${displayField}`];
                });
                data.initialData = false;
                data.ax_time_stamp = Date.now().toString();
                return data;
            } else {
                return [];
            }
        }
    },
}

export const datehelper = {
    /** 将时间字符串转换为指定格式 */
    format: (dateStr, format) => {
        // 对Date的扩展，将 Date 转化为指定格式的String
        // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
        // 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
        // 例子：
        // (new Date()).Format("yyyy-MM-dd HH:mm:ss.S") ==> 2006-07-02 08:09:04.423
        // (new Date()).Format("yyyy-M-d H:m:s.S")      ==> 2006-7-2 8:9:4.18
        Date.prototype.Format = function (fmt) {
            var o = {
                'M+': this.getMonth() + 1, //月份
                'd+': this.getDate(), //日
                'H+': this.getHours(), //小时
                'm+': this.getMinutes(), //分
                's+': this.getSeconds(), //秒
                'q+': Math.floor((this.getMonth() + 3) / 3), //季度
                S: this.getMilliseconds(), //毫秒
            };
            if (/(y+)/.test(fmt))
                fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
            for (var k in o)
                if (new RegExp('(' + k + ')').test(fmt))
                    fmt = fmt.replace(
                        RegExp.$1,
                        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
                    );
            return fmt;
        };

        /** 格式化时间 */
        if (!dateStr || dateStr === '') return '';
        const date = new Date(dateStr.replace(/-/gi, '/'));
        return date.Format(format);
    },
    /** 将时间转换为指定格式 */
    Dateformat: (date, format) => {
        // 对Date的扩展，将 Date 转化为指定格式的String
        // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
        // 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
        // 例子：
        // (new Date()).Format("yyyy-MM-dd HH:mm:ss.S") ==> 2006-07-02 08:09:04.423
        // (new Date()).Format("yyyy-M-d H:m:s.S")      ==> 2006-7-2 8:9:4.18
        Date.prototype.Format = function (fmt) {
            var o = {
                'M+': this.getMonth() + 1, //月份
                'd+': this.getDate(), //日
                'H+': this.getHours(), //小时
                'm+': this.getMinutes(), //分
                's+': this.getSeconds(), //秒
                'q+': Math.floor((this.getMonth() + 3) / 3), //季度
                S: this.getMilliseconds(), //毫秒
            };
            if (/(y+)/.test(fmt))
                fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
            for (var k in o)
                if (new RegExp('(' + k + ')').test(fmt))
                    fmt = fmt.replace(
                        RegExp.$1,
                        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
                    );
            return fmt;
        };

        /** 格式化时间 */
        if (!date || date === '') return '';
        return date.Format(format);
    },
    transDateTime: (val, fmt) => {
        if (val && !Array.isArray(val)) {
            if (val === '0001-01-01 00:00:00~0001-01-01 00:00:00') return null;
            const dt = val.split('~');
            if (dt && dt.length === 2) {
                return [moment(dt[0], fmt), moment(dt[1], fmt)];
            }
            return null;
        }
        return null;
    },
    /**
     *获取当前星期几
     *
    */
    getWeekDate: (dateStr) => {
        var now = new Date(dateStr.replace(/-/gi, '/'));
        var day = now.getDay();
        var weeks = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
        var week = weeks[day];
        return week;
    },
    /**
     *获取当前时间段
     *2021-04-21 22:34:32
    */
    getTimeSlot: (dateStr) => {
        const time = parseInt(dateStr.substr(11, 2));
        
        if (time < 3)
            return '00:00-03:00';
        else if (time < 6)
            return '03:00-06:00';
        else if (time < 9)
            return '06:00-09:00';
        else if (time < 12)
            return '09:00-12:00';
        else if (time < 15)
            return '12:00-15:00';
        else if (time < 18)
            return '15:00-18:00';
        else if (time < 21)
            return '18:00-21:00';
        else if (time < 24)
            return '21:00-24:00';
    },
    /**
     *获取最近一周
     *
    */
    getLastWeek: () => {
        var now = new Date();
        var day = now.getDay();
        const arr = [];
        var weeks = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
        for (var i = 6; i >= 0; i--) {
            let d = day - i;
            if (d < 0) {
                d = d + 7;
            }
            arr.push({
                name: weeks[d],
                value: 0,
            });
        }
        return arr;
    }
};